//山脉数组的峰顶索引
/*给定一个长度为 n 的整数 山脉 数组 arr ，其中的值递增到一个 峰值元素 然后递减。

返回峰值元素的下标。

你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。
3 <= arr.length <= 105
0 <= arr[i] <= 106
题目数据 保证 arr 是一个山脉数组
*/
int peakIndexInMountainArray(int* arr, int arrSize) {
    int left = 0;
    int right = arrSize - 1;
    int mid;
    while (left < right) {
        mid = (left + right) / 2;
       /* if (mid == arrSize - 1) {
            if(arr[mid]>arr[mid-1])
            return mid;
            else
            return mid-1;
        } else*/ if (mid == 0) {
            if (arr[mid] < arr[mid + 1])
                return mid + 1;
            else
                return mid;
        } else if (arr[mid] > arr[mid - 1] && arr[mid] > arr[mid + 1]) {
            return mid;
        } else if (arr[mid] > arr[mid - 1]) {
            left = mid + 1;

        } else if (arr[mid] > arr[mid + 1]) {
            right = mid - 1;
        }
    }
    return left;
}



//“气球” 的最大数量
/*给你一个字符串 text，你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"（气球）。

字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。
1 <= text.length <= 104
text 全部由小写英文字母组成*/
int find_balloon(int* arr) {
    char balloon[8] = {"balloon"};
    int count = 0;
    while (1) {
        for (int i = 0; i < 7; i++) {
            arr[balloon[i] - 'a']--;
            if (arr[balloon[i] - 'a'] < 0) {
                return count;
            }
        }
        count++;
    }
}
int maxNumberOfBalloons(char* text) {
    int arr[26] = {0};
    int size = strlen(text);
    for (int i = 0; i < size; i++) {
        arr[text[i] - 'a']++;
    }
    return find_balloon(arr);
}